昨天我們介紹了如何設定MongoDB Compass,現在我們就可以比較簡單的去檢視今天進行的操作結果。這邊先補充昨天連線的內容,如果有遇到以下問題可先嘗試一些解決辦法:
連線問題:點擊連線時依然遇到連線失敗的問題,且已經將0.0.0.0/0加入network access
解決方法:右鍵點擊connection,選取edit connection。確認URI當中的password是否和網頁中的database access所設定的user密碼一致,如果看不到密碼就新增password。
註解:這邊記得可以勾選下方藍勾(Favorite this connection),這樣日後進行連線查看時可以方便一些。
回到今天的主題:pymongo CRUD。先解釋兩個名詞:pymongo & CRUD,pymongo 是python 的一個專門套件用於編輯資料庫中資料。而CRUD是四個單詞的組合:Create/ Read/ Update/ Delete,這些都是面對資料存取時常會用到的功能。接下來將會介紹如何使用pymongo去進行資料編輯。
建立連線
from pymongo import MongoClient
connecting_string = "your_connection_string"
client = MongoClient(connecting_string)
db = client['practice_CRUD']
collection = db['name_ages']
connecting string可以從Compass右鍵點擊剛剛的連線名稱,選取Copy connecting string。
# 插入一個文件
document = {"name": "Alice", "age": 25, "city": "New York"}
result = collection.insert_one(document)
print(f"Inserted document ID: {result.inserted_id}")
# 插入多個文件
documents = [
{"name": "Bob", "age": 30, "city": "Chicago"},
{"name": "Charlie", "age": 35, "city": "San Francisco"}
]
result = collection.insert_many(documents)
print(f"Inserted document IDs: {result.inserted_ids}")
當操作完成Create之後,點擊Refresh就可以看到我們創建的practice_CRUD database。
# 查詢一個文件
document = collection.find_one({"name": "Alice"})
print(document)
# 查詢多個文件
# $gte是找尋檔案的運算符,也就是查詢條件。下方連結有詳細的運算符介紹
documents = collection.find({"age": {"$gte": 30}})
for doc in documents:
print(doc)
https://ithelp.ithome.com.tw/articles/10244169
這裡使用的是find方法來去進行資料的讀取,而且資料讀取的方式也會比較沒有效率。因為這樣的查找方式就是「遍歷」所有資料,然後挑出符合設定條件的documents。後續會介紹可以優化的方法。
# 更新一個文件
result = collection.update_one({"name": "Alice"}, {"$set": {"age": 26}})
print(f"Modified count: {result.modified_count}")
# 更新多個文件
result = collection.update_many({"city": "New York"}, {"$set": {"city": "Brooklyn"}})
print(f"Modified count: {result.modified_count}")
這邊稍微解釋一下$set,update function的第一個變數是告知要針對document當中要修改的位置,第二個變數是告知要編輯的方式。而$set就是當city欄位是New York的資料改寫成Brooklyn,當然這裡不一定要改寫city欄位,可以改寫age或者name等等欄位。
# 刪除一個文件
result = collection.delete_one({"name": "Alice"})
print(f"Deleted count: {result.deleted_count}")
# 刪除多個文件
result = collection.delete_many({"city": "Brooklyn"})
print(f"Deleted count: {result.deleted_count}")
delete方法很好理解,就是給定條件,只要符合條件的document都會被刪除。
以上就是基本的資料讀寫,當每一個操作做完之後都可以到Compass當中去確認操作的結果。如果發現database當中沒有更動,確認一下pymongo執行結果沒有出錯,或者記得確認按下Refresh重整資料庫。希望今天的分享有幫助到實際操作上遇到問題的同學~
(以上程式碼有使用GPT協助製作)